<?php
/**
 * Classe que representa um Setor dentro de um Departamento
 */
class Setor implements IObject {
    /**
     * @var MyDb
     */
    public $tMysqli;

    private $IDSetor;
    private $IDDepartamento;
    private $StNome;
    private $ArFuncionarios;
    private $Departamento;
    private $Report;

    public function __construct($IDSetor, $IDDepartamento, $StNome, &$tMysqli = false) {
        $this->IDSetor = $IDSetor;
        $this->IDDepartamento = $IDDepartamento;
        $this->StNome = $StNome;
        $this->tMysqli = $tMysqli;
    }

    /**
     * @static loadSector
     *
     * Carrega um setor atraves de seu ID
     *
     * @param   Integer    $IDSetor     ID do setor que sera carregado
     * @param   MyDb       $tMysqli     Objeto de conexao com banco
     *
     * @return  Setor
     * @since   Abril de 2012
     * @author  Richard Brandao <richardsbrandao@gmail.com>
     */
    public static function loadSector($IDSetor, &$tMysqli = false) {
        $StSql = TQuery::getSqlFindSectorById($IDSetor);
        $tMysqli->exec($StSql);
        return new Setor($IDSetor, $tMysqli->result(0, 'IDDepartamento'), $tMysqli->result(0, 'StNome'), $tMysqli);
    }

    /**
     * @method  loadEmployee
     *
     * Carrega todos os empregados que estao associados a este Setor
     *
     * @return  void
     * @since   Abril de 2012
     * @author  Richard Brandao <richardsbrando@gmail.com>
     */
    public function loadEmployee() {
        if( !empty($this->ArFuncionarios) ) { return; }
        $this->tMysqli->getConnection(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DB);
        $StSql = TQuery::getSqlFindUserBySector($this->IDSetor);
        $tQuery = $this->tMysqli->exec($StSql);
        while($ArUserData = mysqli_fetch_assoc($tQuery)) {
            $this->ArFuncionarios[] = new Usuario($ArUserData['IDUsuario'], $this->tMysqli, true);
        }
        $this->tMysqli->close();
    }

    /**
     * @method  countEmployees
     *
     * Retorna o numeros de Empregados que estao associados a este Setor
     *
     * @return  Integer
     * @since   Abril de 2012
     * @author  Richard Brandao <richardsbrando@gmail.com>
     */
    public function countEmployees() {
        return count($this->ArFuncionarios);
    }

    public function countContractorEmployees() {
        if(empty($this->ArFuncionarios)) {return 0;}
        $contractors = 0;
        foreach($this->ArFuncionarios as $Usuario) {
            if( $Usuario->isContractor() ) {
                $contractors++;
            }
        }
        return $contractors;
    }

    public function equals(IObject $Setor) {
        return ($this->IDSetor == $Setor->getIDSetor());
    }

    public function getIDSetor() {
        return $this->IDSetor;
    }

    public function setIDSetor($IDSetor) {
        $this->IDSetor = $IDSetor;
    }

    public function getIDDepartamento() {
        return $this->IDDepartamento;
    }

    public function setIDDepartamento($IDDepartamento) {
        $this->IDDepartamento = $IDDepartamento;
    }

    public function getStNome() {
        return $this->StNome;
    }

    public function setStNome($StNome) {
        $this->StNome = $StNome;
    }

    public function getArFuncionarios() {
        return $this->ArFuncionarios;
    }

    public function setArFuncionarios($ArFuncionarios) {
        $this->ArFuncionarios = $ArFuncionarios;
    }

    public function getDepartamento() {
        return $this->Departamento;
    }

    public function setDepartamento($Departamento) {
        $this->Departamento = $Departamento;
    }

    public function getReport($StProp) {
        return $this->Report[$StProp];
    }

    public function setReport($Report) {
        $this->Report = $Report;
    }

}

?>
